package com.java.base.exercise.current;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @Author RenPu
 * @Date 2021/9/13 10:57
 * @Version 1.0
 * @Description: 生产者启动一个线程把所有邮件全部抽取到队列中，消费者启动
 * CPU*2个线程数处理邮件，从之前的单线程处理邮件变成了现在的多线程处理，并且抽取邮件
 * 的线程不需要等处理邮件的线程处理完再抽取新邮件，所以使用了生产者和消费者模式后，
 * 邮件的整体处理速度比以前要快了几倍
 **/

public class QuickEmailToWikiExtractor {

//    private ThreadPoolExecutor threadsPool;
//    private ArticleBlockingQueue<ExchangeEmailShallowDTO> emailQueue;
//
//    //初始化线程池，文章队列无参构造方法
//    public QuickEmailToWikiExtractor() {
//        emailQueue= new ArticleBlockingQueue<ExchangeEmailShallowDTO>();
//        int corePoolSize = Runtime.getRuntime().availableProcessors() * 2;
//        threadsPool = new ThreadPoolExecutor(corePoolSize, corePoolSize, 10l, TimeUnit.
//                SECONDS,
//                new LinkedBlockingQueue<Runnable>(2000));
//    }
//
//
//
//    public void extract() {
//
//        long start = System.currentTimeMillis();
//// 抽取所有邮件放到队列里
//        new ExtractEmailTask().start();  //消息生产者
//// 把队列里的文章插入到Wiki
//        insertToWiki();                  //消息消费者
//        long end = System.currentTimeMillis();
//        double cost = (end - start) / 1000;
//    }
//    /**
//     * 把队列里的文章插入到Wiki
//     */
//    private void insertToWiki() {
//// 登录Wiki,每间隔一段时间需要登录一次
//        confluenceService.login(RuleFactory.USER_NAME, RuleFactory.PASSWORD);
//        while (true) {
//// 2秒内取不到就退出
//            ExchangeEmailShallowDTO email = emailQueue.poll(2, TimeUnit.SECONDS);
//            if (email == null) {
//                break;
//            }
//            threadsPool.submit(new insertToWikiTask(email));
//        }
//    }
//
//
//
//
//    protected List<Article> extractEmail() {
//        List<ExchangeEmailShallowDTO> allEmails = getEmailService().queryAllEmails();
//        if (allEmails == null) {
//            return null;
//        }
//        for (ExchangeEmailShallowDTO exchangeEmailShallowDTO : allEmails) {
//            emailQueue.offer(exchangeEmailShallowDTO);
//        }
//        return null;
//    }
//
//
//
//
//    /**
//     * 抽取邮件任务
//     *
//     * @author tengfei.fangtf
//     */
//    public class ExtractEmailTask extends Thread {
//        @Override
//        public void run() {
//            extractEmail();
//        }
//    }


}
